Logging an execution-timeΒΆ
import functools
import logging
import time
def logged(method):
""" Logging an execution-time """
@functools.wraps(method)
def inner(*args, **kwargs):
start_time = time.time()
# Run the decorated method
return_value = method(*args, **kwargs)
# Calculate the completion time
end_time = time.time()
exec_time = end_time - start_time
# Log the method call and the result
logger = logging.getLogger('decorator.logged')
logger.warning('Called method %s at %.02f; execution time: %.02f seconds; result: %r' \
%(method.__name__, start_time, exec_time, return_value))
return return_value
return inner
@logged
def sleep_and_return(return_value):
time.sleep(2)
return return_value
print(sleep_and_return(21))
if __name__ == "__main__":
value = sleep_and_return(21)
Result:
Called method sleep_and_return at 1579328869.54; execution time: 2.00 seconds; result: 21